//导入 购物车页 请求数据的接口
import { reqGetCartList, deleteCartListData, reqChangeisChecked } from "@/api"

const actions = {
  //获取购物车的数据
  async getShopCartList({ commit }) {
    let result = await reqGetCartList()
    if (result.code == 200) {

      commit('GETSHOPCARTLIST', result.data)
    }
  },
  //删除购物车当前这一条的数据
  async deletenowlist({ commit }, skuId) {
    let result = await deleteCartListData(skuId)
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error('falie'))
    }
  },
  //点击修改 勾选状态 请求新的数据
  async changeIschecked({ commit }, { skuId, isChecked }) {
    let result = await reqChangeisChecked(skuId, isChecked)
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error('falie'))
    }
  },
  //删除所有选中的商品
  delateCheckedAll(context) {
    //当前购物车仓库中加入进来几条数据
    let cartInfoList = context.state.cartList[0].cartInfoList
    let promiseAll = []
      //遍历购物车中的几条数据
    cartInfoList.forEach(item => {
        //如果这条商品被选中的  那么就删除当前产品
        if (item.isChecked == 1) {
          let promise = context.dispatch('deletenowlist', item.skuId)
            //把每一个返回的promise  都添加到这个数组中
          promiseAll.push(promise)
        }

      })
      //调用promise.all 方法 如果所有的p1  p2  p3  p4 都是成功说明都成功删除了
    return Promise.all(promiseAll)
  },
  //全选 全不选 更改每一条数据的状态
  changeCheckedAll(context, isChecked) {
    //拿到有多少条数据，遍历这个数据，一条条修改
    let cartInfoList = context.state.cartList[0].cartInfoList
      //创建一个空数组
    let promiseall = []
    cartInfoList.forEach(item => {
        //每次遍历的时候调用修改当前数据 checked的函数
        let promise = context.dispatch('changeIschecked', { skuId: item.skuId, isChecked })
        promiseall.push(promise)
      })
      //如果promiseall里面所有  promise  都是成功的状态，那么all  也是返回成功的promise
    return Promise.all(promiseall)
  }
}
const mutations = {
  GETSHOPCARTLIST(state, cartList) {
    state.cartList = cartList
  }

}
const state = {
  cartList: []
}
const getters = {
  //处理简化一下数据  第一次处理到 数据第0项目  默认是一个对象 还不够 还需要往下处理
  cartList(state) {
    return state.cartList[0] || {}
  }
}

export default { actions, mutations, state, getters }